import { ResultCode } from './result-code';

// 错误信息映射
export const ErrorMessages = new Map<ResultCode, string>([
  [ResultCode.SUCCESS, '操作成功'],

  // 客户端错误 4xx
  [ResultCode.BAD_REQUEST, '请求参数错误'],
  [ResultCode.UNAUTHORIZED, '未登录或登录已过期'],
  [ResultCode.FORBIDDEN, '没有操作权限'],
  [ResultCode.NOT_FOUND, '请求的资源不存在'],

  // 用户相关错误 1000~1999
  [ResultCode.USER_NOT_FOUND, '用户不存在'],
  [ResultCode.USER_EXISTS, '用户名已存在'],
  [ResultCode.PASSWORD_ERROR, '密码错误'],
  [ResultCode.USERNAME_EMPTY, '用户名不能为空'],
  [ResultCode.PASSWORD_EMPTY, '密码不能为空'],
  [ResultCode.PASSWORD_NOT_MATCH, '两次输入的密码不一致'],
  [ResultCode.USER_UPDATE_FAILED, '用户信息更新失败'],

  // 账户相关错误 2000~2999
  [ResultCode.ACCOUNT_NOT_FOUND, '账户不存在'],
  [ResultCode.ACCOUNT_EXISTS, '该用户已存在该类型账户'],
  [ResultCode.BALANCE_NOT_ENOUGH, '账户余额不足'],

  // 交易相关错误 3000~3999
  [ResultCode.TRANSACTION_NOT_FOUND, '交易记录不存在'],
  [ResultCode.INVALID_AMOUNT, '无效的交易金额'],

  // 系统错误 5xx
  [ResultCode.SYSTEM_ERROR, '系统内部错误'],
  [ResultCode.SERVICE_UNAVAILABLE, '服务不可用'],

  // 文件相关错误 4000~4999
  [ResultCode.UPLOAD_FAILED, '文件上传失败'],
  [ResultCode.INVALID_FILE_TYPE, '不支持的文件类型'],
  [ResultCode.FILE_SIZE_EXCEEDED, '文件大小超出限制'],
  [ResultCode.PARTIAL_UPLOAD_FAILED, '部分文件上传失败']
]);

// 工具函数
export class ErrorMessageUtil {
  /**
   * 获取错误信息
   * @param code 错误码
   * @returns 对应的错误信息，如果没有找到则返回默认错误信息
   */
  static getMessage(code: ResultCode): string {
    return ErrorMessages.get(code) || '未知错误';
  }

  /**
   * 判断是否为成功状态码
   * @param code 状态码
   */
  static isSuccess(code: ResultCode): boolean {
    return code === ResultCode.SUCCESS;
  }

  /**
   * 判断是否为客户端错误
   * @param code 状态码
   */
  static isClientError(code: ResultCode): boolean {
    return code >= 400 && code < 500;
  }

  /**
   * 判断是否为服务器错误
   * @param code 状态码
   */
  static isServerError(code: ResultCode): boolean {
    return code >= 500;
  }

  /**
   * 判断是否需要重新登录
   * @param code 状态码
   */
  static needReLogin(code: ResultCode): boolean {
    return code === ResultCode.UNAUTHORIZED;
  }
} 